package my.iterator;

import java.util.Iterator;

//服务员实现类 (服务员可以兼职了)
public class Waitress {

    //饭店菜单
    private Menu dinerMenu;
    //煎饼屋菜单
    private Menu pancakeHouseMenu;


    /**
     * 优点：
     * 1、将菜单的遍历封装到了 Iterator 服务员不用关心，菜单的数据结构了
     * 缺点：
     * 1、每次我们一有新菜单加入，就必须打开服务员实现类进行修改
     * 2、每个菜单多需要调用一次 printMenu 进行打印
     * 解决办法：
     * 我们需要一种统一的管理办法，请看 composite 包内的组合迭代模式，
     * 还可以支持子菜单
     */
    public  Waitress(Menu dinerMenu, Menu pancakeHouseMenu) {
        this.dinerMenu = dinerMenu;
        this.pancakeHouseMenu = pancakeHouseMenu;
    }

    public void printMenu() {
        Iterator iterator = dinerMenu.createIterator();
        System.out.println("------------餐厅菜单------------");
        printMenu(iterator);
        Iterator iterator1 = pancakeHouseMenu.createIterator();
        System.out.println("------------煎饼屋菜单------------");
        printMenu(iterator1);
    }

    private void printMenu(Iterator iterator) {
        while (iterator.hasNext()) {
            MenuItem menuItem = (MenuItem) iterator.next();
            System.out.println("名称：" + menuItem.getName());
            System.out.println("描述：" + menuItem.getDescription());
            System.out.println("价格：" + menuItem.getPrice());
        }
    }
}
